package com.alan.camunda.boot.config;

import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.engine.impl.incident.IncidentContext;
import org.camunda.bpm.engine.impl.incident.IncidentHandler;
import org.camunda.bpm.engine.runtime.Incident;

/**
 * 可以配合 Main IncidentHandler 工作， Main Handler 记录数据
 * 这个 Handler 可以做业务上的事，比如发邮件
 * 需要设置配置参数  compositeIncidentHandlersEnabled 为 true
 */
@Slf4j
public class MyFailedJobIncidentHandler implements IncidentHandler {


    @Override
    public String getIncidentHandlerType() {
        return "failedJob";
    }

    @Override
    public Incident handleIncident(IncidentContext context, String message) {

        // 可以在这里发邮件告知管理员系统问题
        // 当 failedJob 重试次数耗尽，会触发 Incident，方法返回前，Incident 数据没有落到数据库

        log.info("发生 Incident 的节点为: {}, ExecutionId 为: {}, 错误信息为: {}", context.getFailedActivityId(), context.getExecutionId(), message);
        return null;
    }

    @Override
    public void resolveIncident(IncidentContext context) {

    }

    @Override
    public void deleteIncident(IncidentContext context) {

    }
}
